Various forms of storage systems are used today. These forms include direct attached storage (DAS) network attached storage (NAS) systems, storage area networks (SANs), and others. Network storage systems are commonly used for a variety of purposes, such as providing multiple users with access to shared data, backing up data and others.
A storage system typically includes at least a computing system executing a storage operating system for storing and retrieving data on behalf of one or more client computing systems (“clients”). The storage operating system stores and manages shared data containers in a set of mass storage devices.
The storage system may be implemented as a clustered storage system having a plurality of nodes. The storage system can be presented to client systems as virtual storage systems.
Input/output (I/O) requests are typically used to read and write data in storage systems and may sometimes be cached by the storage system. The term caching as used herein means using a memory by a storage controller to temporarily store data before the data is persisted (or stored) at a storage device. Typically, processing of I/O requests using cache management routines comprise a significant portion of the overall I/O processing and handling. Cache management operations—such as allocating cache blocks, managing data, inserting a cache block into a hash list, and managing various dirty cache lists—are not only processor (CPU) intensive but are also important for successfully processing I/O requests. Cache management operations are resource intensive because they involve manipulating multiple lists, queues, hash tables and others during an I/O operation and maintaining cache related statistics.
In multi-processor environments, typical cache designs/operations become a bottleneck, as cache management operations often are single threaded or managed using locks. Managing cache related operations via locks can be suboptimal for I/O processing, especially in a multi-processor and multi-storage node environment because a lock causes contention (thereby increasing response times) and may in some situations invalidate a cache. Continuous efforts are being made to improve data caching, particularly with respect to multi-processor environments.